﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Spring.Context;
using Spring.Context.Support;
using GRUPO_4.Negocio;
using GRUPO_4.Dominio;

namespace GRUPO_4.Pruebas
{
    [TestFixture]
    public class TestPostulanteService
    {
        private IApplicationContext contexto = null;

        [TestFixtureSetUp]
        public void InicializarSpring()
        {
            this.contexto = new XmlApplicationContext(
                "assembly://GRUPO-4/GRUPO_4/CapaNegocio.xml",
                "assembly://GRUPO-4/GRUPO_4/CapaPersistencia.xml");
        }

        [Test]
        public void TestRealizarPostulanteCorrectamente()
        {
            PostulanteService postulanteService = (PostulanteService)this.contexto.GetObject("postulanteService");
            Assert.NotNull(postulanteService);
            Postulante postulanteRealizado = null;
            Assert.DoesNotThrow(delegate
            {
                Postulante postulanteNuevo = new Postulante ();
                postulanteNuevo.codPostulante = 777;
                postulanteNuevo.nombre = "Marco";
                postulanteNuevo.apePaternoPostulante = "Saldarriaga";
                postulanteNuevo.apeMaternoPostulante = "Medina";

                postulanteRealizado = postulanteService.CrearPostulante(postulanteNuevo);
            });

            Assert.NotNull(postulanteRealizado);
            Assert.Greater(postulanteRealizado.codPostulante, 0);
        }
        [Test]
        public void TestEliminarPostulante()
        {
            PostulanteService postulanteService = (PostulanteService)this.contexto.GetObject("postulanteService");
            Assert.NotNull(postulanteService);
            Postulante postulanteExiste = postulanteService.ObtenerPostulante(23);
            Postulante postulanteEliminado = null;
            Assert.DoesNotThrow(delegate
            {
                postulanteService.EliminarPostulante(postulanteExiste);
            });
            Assert.Null(postulanteEliminado);
            }
        [Test]
        public void TestListarPostulante()
        {
            PostulanteService postulanteService = (PostulanteService)this.contexto.GetObject("postulanteService");
            Assert.NotNull(postulanteService);
            ICollection<Postulante> listaPostulante = null;
            Assert.DoesNotThrow(delegate
            {
                listaPostulante = postulanteService.ListarTodoslosPostulantes();
            });
            Console.WriteLine(listaPostulante.Count);
            Assert.Greater(listaPostulante.Count, 0);
            foreach (Postulante ofer in listaPostulante)
            {
                Console.WriteLine(ofer.codPostulante + "|" + ofer.apePaternoPostulante + "|" + ofer.apeMaternoPostulante + "|" + ofer.nombre + "|" + ofer.sexo + "|" + ofer.FechaNacimiento + "|" + ofer.numeroDocumento + "|" + ofer.correo + "|" + ofer.clave + "|" + ofer.telefono + "|" + ofer.ultimaEmpresa + "|" + ofer.area + "|" + ofer.cargo + "|" + ofer.codProfesion);
            }
            
        }

        [Test]
        public void TestConsultarPostulante()
        {
            PostulanteService postulanteService = (PostulanteService)this.contexto.GetObject("postulanteService");
            Assert.NotNull(postulanteService);
            Postulante postulanteConsultado = null;
            postulanteConsultado = postulanteService.ObtenerPostulante(123);
            Assert.NotNull(postulanteConsultado);
        }
    }
}